package com.wkg.lotterysystem.service.impl;

import com.wkg.lotterysystem.common.errorcode.ServiceErrorCodeConstants;
import com.wkg.lotterysystem.common.exception.ServiceException;
import com.wkg.lotterysystem.service.PictureService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * 使用@Slf4j注解提供日志功能
 * 使用@Component注解声明为Spring组件
 */
@Slf4j
@Component
public class PictureServiceImpl implements PictureService {

    @Value("${pic.local-path}")  // 从配置注入图片本地存储路径
    private String localPath;

    @Override  // 实现保存图片方法
    public String savePicture(MultipartFile multipartFile) {
        // 创建目录
        //mkdir()
        //功能： mkdir() 方法只能创建一级目录。
        //局限性： 如果你想创建的目录的父目录不存在，mkdir() 会创建失败并返回 false。

        // mkdirs() 方法可以创建多级目录。
        //任何一级父目录不存在，mkdirs() 会自动创建所有缺失的父目录。
        File dir = new File(localPath);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        // 处理文件名
        // 原始格式示例：aaa.jpg → 提取.jpg后缀 → 生成随机文件名xxx.jpg
        String filename = multipartFile.getOriginalFilename();
        assert filename != null;
        String suffix = filename.substring(filename.lastIndexOf("."));
        filename = UUID.randomUUID() + suffix;

        // 保存图片文件
        try {
            multipartFile.transferTo(new File(localPath + "/" + filename));
        } catch (IOException e) {
            log.error("图片上传失败，IO异常: {}", e.getMessage(), e);
            throw new ServiceException(ServiceErrorCodeConstants.PIC_UPLOAD_ERROR);
        }

        return filename;  // 返回生成的文件名
    }
}
